package com.zx.validation.annotation;

import com.zx.validation.enums.DateTimeFormatEnum;
import com.zx.validation.enums.ValidateRulesEnum;

import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

/**
 * <p>
 * description: 参数验证注解 <br>
 * create: 2024-10-11 15:57
 * </p>
 *
 * @author zhou  xun
 */
@Repeatable(ParameterValidations.class)
@Retention(RetentionPolicy.RUNTIME)
public @interface ParameterValidation {

    /**
     * 参数位置
     */
    int index();

    /**
     * 参数描述
     */
    String desc() default "Parameter Desc";

    /**
     * 参数长度区间
     */
    String length() default "";

    /**
     * 参数日期格式
     */
    DateTimeFormatEnum dateFormat() default DateTimeFormatEnum.NULL;

    /**
     * 参数验证规则
     */
    ValidateRulesEnum[] rules();

    /**
     * 参数最小值
     */
    long numberMin() default 0L;

    /**
     * 参数最大值
     */
    long numberMax() default 0L;

    /**
     * 参数小数位数
     */
    int scale() default 0;

    /**
     * 参数指定倍数
     */
    long multipleOf() default 1L;

    /**
     * 参数验证分组
     */
    Class<?>[] groups() default {};
}